1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <cstdio> #include <cstring> #define LL long long const int maxn = 2005; const int mo = 998244353; using namespace std; int n, m, a[105][maxn], s[105]; LL ans = 1, f[105][maxn]; int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++){ scanf("%d", a[i] + j); s[i] = (s[i] + a[i][j]) % mo; if (j == m) ans = 1ll * ans * (s[i] + 1) % mo; } ans--; for (int i = 1; i <= m; i++){ memset(f, 0, sizeof f); f[0][0] = 1; for (int j = 1; j <= n; j++){ for (int k = 0; k <= (n << 1); k++){ f[j][k] = (f[j][k] + 1ll * f[j - 1][k] * (s[j] + mo - a[j][i]) % mo) % mo; f[j][k + 1] = (f[j][k + 1] + f[j - 1][k]) % mo; f[j][k + 2] = (f[j][k + 2] + 1ll * f[j - 1][k] * a[j][i] % mo) % mo; } } for (int j = n + 1; j <= (n << 1); j++) ans = (ans + mo - f[n][j]) % mo; } printf("%lld\n", ans); return 0; }
|